/**
* 通用form service模块，提供对form的常用功能支持
* @Date:    2015-6-16
* @author:  Jackson wang
* @version: 1.0
* @since:   1.0
*/
app.addService('form-serv',	function(){

	'use strict';

	var private_method = {
		getDataObj:function(targetForm){
			if(targetForm){
				var data = $(targetForm).serializeArray(); 
				var _data={};
				for(var name in data){				     
					_data[data[name].name] =  data[name].value;				     
				}				
				return _data;
			}
		},
		getDataStr:function(targetForm){
			if(targetForm)					
				var data,_data;
			
				data= $(targetForm).serializeArray();
				_data="";

				for(var name in data){
				     if(_data!=""){
					_data +=",";
				     }
				     _data += '"'+data[name].name +'"'+ ':"' + data[name].value + '"';
				}
				_data = "{" + _data + "}";
				return _data;
		},


		/**
		* 设置form验证规则
		* @param _options.targetForm form表单对象
		* @param _options.validateRules form字段验证规则
		* @param _options.validateMessage 验证提示信息
		* @param _options.submitHandler 验证通过后执行的handler
		* @return 返回验证标志true or false
		*
		*
		*/
		validate:function(_options){			
			
			
			if(_options.targetForm){
				var _v = {};
				if(_options.rules)
					_v['rules']=_options.rules;

				if(_options.messages)
					_v['messages']=_options.messages;

				if(_options.submitHandler&&$.isFunction(_options.submitHandler) )
					_v['submitHandler']=_options.submitHandler;

				$(_options.targetForm).validate( _v ); 
			}
		}

		/**
		* 常用表单验证格式
		*(1)required:true               必输字段
		*(2)email:true                  必须输入正确格式的电子邮件
		*(3)url:true                    必须输入正确格式的网址
		*(4)date:true                   必须输入正确格式的日期
		*(5)dateISO:true                必须输入正确格式的日期(ISO)，例如：2009-06-23，1998/01/22 只验证格式，不验证有效性
		*(6)number:true                 必须输入合法的数字(负数，小数)
		*(7)digits:true                 必须输入整数
		*(8)creditcard:                 必须输入合法的信用卡号
		*(9)equalTo:"#field"           输入值必须和#field相同
		*(10)accept:                    输入拥有合法后缀名的字符串（上传文件的后缀）
		*(11)maxlength:5                输入长度最多是5的字符串(汉字算一个字符)
		*(12)minlength:10               输入长度最小是10的字符串(汉字算一个字符)
		*(13)rangelength:[5,10]         输入长度必须介于 5 和 10 之间的字符串")(汉字算一个字符)

		*(14) equalLength:10            输入长度必须是10
		*(14)range:[5,10]               输入值必须介于 5 和 10 之间
		*(15)max:5                      输入值不能大于5
		*(16)min:10                     输入值不能小于10
		*
		*
		*
		*rules: {
        *        DictKey: { required: true, maxlength: 10 },
        *        DictContent: { required: true, maxlength: 10 }
        *    },
        *    messages: {
        *        DictKey: { required: "不能为空", maxlength: jQuery.format("不能超过{0}个字符") },
        *        DictContent: { required: "不能为空", maxlength: jQuery.format("不能超过{0}个字符") }
        *    },
        *    submitHandler: function (form) {
        *        form.submit();
        *    }
		*
		*/
	};

	return {
		/**
		*
		* 初始化方法，进行模块内部的初始化工作		
		*/
		init:function(){},

		/**
		*
		* 销毁方法，清除遗留数据及方法绑定，释放内存		*
		*/
		destory:function(){},

		/**
		* 根据表单名称获取表单字段值，并生成json对象返回
		* @param _options.form 表单名称
		* @param _options.container 表单父级容器
		* @return 表单json对象
		*
		*/
		getDataObj:function(_options){
			var _target;
					

				if(_options.form){

					if(typeof _options.form ==="string"){
						if(_options.container){
							_target = $('#'+_options._targetContainer).find(_options.form);
						}else{
							_target = $('#'+_options.form);
						};			
					}else{
						_target = _options.form;
					}				
					return private_method.getDataObj(_target);
				}
		},

		
		
		/**
		* 根据表单名称获取表单字段值，并生成json文本返回
		* @param _options.form 表单名称
		* @param _options.container 表单父级容器
		* @return 表单json文本
		*/
		getDataStr:function(_options){
				var _target;

				if(_options.form){

					if(typeof _options.form ==="string"){
						if(_options.container){
							_target = $('#'+_options._targetContainer).find(_options.form);
						}else{
							_target = $('#'+_options.form);
						};			
					}else{
						_target = _options.form;
					}
					
					return private_method.getDataStr(_target);
				}
		},
		
		/**
		* 根据规则，验证form表单
		* @param _options.targetForm form表单对象
		* @param _options.validateRules form验证规则
		* @param _options.validateMessage 验证提示信息
		* @return 返回验证标志true or false
		*/
		setValidate:function(_options){
			if(_options.targetForm){
				if(typeof _options.targetForm ==='string'){
					_options.targetForm = $('#' + _options.targetForm);
				}
				private_method.validate(_options);
			}
		},
		/**
		* 验证并提交form表单
		* @param _options.targetForm form表单对象
		* @param _options.validateRules form验证规则
		* @param _options.validateMessage 验证提示信息
		* @param _options.submitHandler 验证通过后回调函数
		* @return 返回验证标志true or false
		*/
		onSubmit:function(_options){
			if(_options.targetForm){
				if(typeof _options.targetForm ==='string'){
					_options.targetForm = $('#' + _options.targetForm);
				}
				private_method.validate(_options);
				
				$(_options.targetForm).submit();
			}
		}
	};

});